![Denodo から Amazon Athena を参照する](https://devio2023-media.developers.io/wp-content/uploads/2024/03/Denodo-icon-1.jpg)
Denodo から Amazon Athena を参照する
こんにちは、川田です。今回は、Denodo より Amazon Athena のテーブルを参照するビューを作成してみます。
公式ドキュメントに記載されている手順を参考に、必要な作業を確認します。
HOW TO CONNECT TO AMAZON ATHENA FROM DENODO
環境
- Denodo Platform 8.0 (Denodo Express)
- Athena engine version 3
利用する Denodo 環境は、無償版にあたる Denodo Express を利用しています。
事前準備
Denodo 側で設定をする前に、AWS 側で必要な作業を実施します。
Glue Data Catalog テーブルを用意
下記のようなテーブルを作成しています。demo
というデータベースに sample
という名前のテーブルを作成しています。dt
というカラムがパーティション・キーとして登録されています。
データレイク全体のファイルサイズは 618 MiB となっています。
$ aws s3 ls --recursive --summarize --human-readable \ s3://analytics-ap-northeast-1-zunda-test/sample | tail -n 3 Total Objects: 1446 Total Size: 618.5 MiB
Denodo 用の IAM ユーザーを用意
Denodo 側で利用する IAM ユーザーを作成します。
今回は user-denodo という名前で作成します。
$ aws iam create-user --user-name user-denodo
作成した IAM ユーザーへ、下記ドキュメントを参考に AWSQuicksightAthenaAccess
ポリシーを付与します。
$ aws iam attach-user-policy --user-name user-denodo \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSQuicksightAthenaAccess
上記とは別に、データレイクの S3 パスにアクセスできるインラインポリシーを付与します。
$ policy=$(cat <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::analytics-ap-northeast-1-zunda-test", "arn:aws:s3:::analytics-ap-northeast-1-zunda-test/*" ] } ] } EOF ) $ aws iam put-user-policy --user-name user-denodo --policy-name policy-access-data-lake \ --policy-document "${policy}"
アクセス・キーとシークレット・キーを発行します。
$ aws iam create-access-key --user-name user-denodo
Denodo 側での作業
Web Design Studio より操作を行います。
Athena 向けのデータソースを作成
File
-> New
-> Data Source
-> JDBC
を選択し、Athena 向けのデータソースを以下の通り追加します。
パラメーター | 値 |
---|---|
Name | ※任意の名前 |
Database adapter | Amazon Athena |
Database URL | jdbc:awsathena://AwsRegion=ap-northeast-1;S3OutputLocation=s3://aws-athena-query-results-ap-northeast-1-xxx/;Schema=demo; |
Transaction isolation | Database Default |
Authentication | Use login and password |
AWS access key id | ******** |
AWS secret access key | ******** |
Database URL の値は、以下の形式で入力します。
jdbc:awsathena://AwsRegion={region};S3OutputLocation={athena result 結果格納の s3 bucket path};Schema={Glue database name};
ベースビューを作成
続いて CREATE BASE VIEW
タブを選択します。事前作業で用意したテーブルが参照できていることを確認し、Create selected
をクリックしベースビューを作成します。
確認
作成したベースビューに対して、VQL Shell での検索を行えるか試してみます。
Retrieve all rows
のチェックボックスを有効にして、パーティションとして利用されているカラム dt
を WHERE 句で指定して SELECT しています。
検索できていますね。
続いて、実行されたクエリの情報を get-query-execution コマンドをより取得してみます。
$ aws athena get-query-execution --query-execution-id aafa19c8-d255-4320-a759-0f854169949c \ --region ap-northeast-1 { "QueryExecution": { "QueryExecutionId": "aafa19c8-d255-4320-a759-0f854169949c", "Query": "SELECT t0.processid AS processid FROM demo.sample t0 WHERE t0.dt = '2009-04-13-06-15'", "StatementType": "DML", "ResultConfiguration": { "OutputLocation": "s3://aws-athena-query-results-ap-northeast-1-xxx/aafa19c8-d255-4320-a759-0f854169949c.csv" }, "ResultReuseConfiguration": { "ResultReuseByAgeConfiguration": { "Enabled": false } }, "QueryExecutionContext": { "Database": "demo" }, "Status": { "State": "SUCCEEDED", "SubmissionDateTime": "2024-04-04T21:57:55.919000+09:00", "CompletionDateTime": "2024-04-04T21:57:56.933000+09:00" }, "Statistics": { "EngineExecutionTimeInMillis": 793, "DataScannedInBytes": 2803966, "TotalExecutionTimeInMillis": 1014, "QueryQueueTimeInMillis": 115, "ServicePreProcessingTimeInMillis": 71, "QueryPlanningTimeInMillis": 242, "ServiceProcessingTimeInMillis": 35, "ResultReuseInformation": { "ReusedPreviousResult": false } }, "WorkGroup": "primary", "EngineVersion": { "SelectedEngineVersion": "AUTO", "EffectiveEngineVersion": "Athena engine version 3" }, "SubstatementType": "SELECT" } }
DataScannedInBytes の値が 2803966 (約2.8MB)となっています。以下、パーティションの値が 2009-04-13-06-15
にあたる S3 パスのサイズは 2.7MiB なので、パーティションが有効に働いていることが分かります。
$ aws s3 ls --recursive --summarize --human-readable \ s3://analytics-ap-northeast-1-zunda-test/sample/dt=2009-04-13-06-15/ | tail -n 3 Total Objects: 6 Total Size: 2.7 MiB